package Lexico;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;


public class textFile {
	private String nombreFichero;
	private int linea=0;
	private int columna=0;
	private String lineaActual= new String("");
	private String lineaAnterior= new String("");
	
	private File f;
	private FileReader Fr;
	private BufferedReader br;
	
	public textFile(String n){
		this.nombreFichero=n;
		
		this.f= new File(nombreFichero);
		try	{
			this.Fr=new FileReader(this.f);                           		// fr crea el flujo hacia f
			this.br=new BufferedReader(this.Fr);                      		// br permite la lectura
			this.leerLinea();
		}
		catch(IOException e) {
			System.out.println("Error, no se pudo leer el archivo."); 		// si no se pudo accede al archivo
		}				
	}
	
	public void guardarArchivo(char[] texto){
		FileWriter fichero = null;
        try
        {
            fichero = new FileWriter(nombreFichero);
            PrintWriter salida = new PrintWriter(fichero);
            int i=0;
            while(i<texto.length){
            	if (texto[i]!='\n')
            		salida.print(texto[i]);
            	else
            		salida.println();
            	i++;
            }
            salida.close();
 
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
           try {
           if (null != fichero)
              fichero.close();
           } catch (Exception e2) {
              e2.printStackTrace();
           }
        }
	}
	
	private void leerLinea(){
		try{
			String nueva= this.br.readLine();
			this.linea++;  
			this.lineaAnterior= this.lineaActual;
			this.lineaActual=nueva;
		} 
		catch(IOException e) {
			System.out.println("Fin del Archivo."); 						// si no se pudo accede al archivo
		}	
	}

	public String getLetra(){
		String devolver="";
		if (this.columna > this.lineaActual.length()){
			this.leerLinea();													//lee linea nueva
			this.columna=0;	
		}
			if (this.lineaActual == null)
				devolver= "/eof";                                     			//se llego al fin del archivo
			else{
				if (this.columna==this.lineaActual.length())	          		//llego a fin de linea
					devolver= "/n"; 									    	//devuelve fin de linea	
				else{
					char aux= (this.lineaActual).charAt(columna);
					devolver=""+aux;
					switch (aux){
						case '\t': devolver="/t"; break;
						case ' ': devolver=" "; break;
					}						
				}			
				this.columna++;
			}					
		return devolver;		                                             
	}
	
	
	public int getColumnaActual(){
		return this.columna;
	}
	
	public int getNumeroLinea(){
		return this.linea;
	}
	
	private void retrocederPosicion(){
		int nuevaCol= this.columna-1;                             			//se calcula la linea
		if (nuevaCol<0){                                          			//en caso de llegar a principio de linea se retrocede una linea
			this.lineaActual= this.lineaAnterior;                 			//solo para una linea anterior
			this.columna= this.lineaActual.length();
			this.linea--;
		}
		else
			this.columna= nuevaCol;
	}	
	
	public void posicionar(int pos){
		if (pos==-1)
			this.retrocederPosicion();
	}
	
	public String getLineaActual(){                                        //siempre pasa a la siguiente
		this.leerLinea();
		return this.lineaAnterior;
	}
	
	public static void main(String[] args) {
		textFile test= new textFile("C:\\test.txt");
	
		System.out.println(test.getLetra());
		System.out.println(test.getLetra());
		System.out.println(test.getLetra());
		
		System.out.println(test.getLetra());
		
		System.out.println(test.getLetra());
	}	
}
